#if !defined(_EXPRESSION_RESOLUTOR_H)
#define _EXPRESSION_RESOLUTOR_H

#include "alias.h"
#include "TypeDescriptor.h"
#include "SValue.h"

CREATE_ALIAS( ExpressionResolutor )

/**
 * The SCOTT expression resolutor.
 */
class DECLARATION_DLL ExpressionResolutor
{

public:
	
	ExpressionResolutor() {}

	/**
	 * Get the value of an expression with simple type inference.
	 */
	static SValueSp Resolve(string expression, SValueSpMapSp vars);

	/**
	 * Get the value of an expression. 
	 * The result must be of a specific simple type otherwise an exception will be thrown.
	 */
	static SValueSp Resolve(string expression, SValueSpMapSp vars, SType type);

	/**
	 * Get the value of an expression.
	 * The result must be of a specific complex type otherwise an exception will be thrown.
	 */
	static SValueSp Resolve(string expression, SValueSpMapSp vars, TypeDescriptorSp td);

};

#endif  // _EXPRESSION_RESOLUTOR_H
